<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>数组合并与切片</title>
  </head>
  <body>
    <!-- <script src="./node_modules/atguigu-utils/dist/atguigu-utils.js"></script> -->
    <script type="text/javascript">
      const aUtils = {
        // ---------------------concat合拼数组
        // 三点运算符：只有放在参数位置，是打包，其它的全部都是解包
        concat(oldArr, ...values) {
          const array = [...oldArr];
          values.forEach((value) => {
            // value类型判断
            if (Array.isArray(value)) {
              array.push(...value);
            } else {
              array.push(value);
            }
          });
          return array;
        },
        // ---------------------slice切片方法
        slice(oldArr, start, end) {
          const array = [];
          // 1.处理特殊情况oldArr不是数组
          if (!Array.isArray(oldArr)) {
            throw new Error("第一个参数必须是数组");
          }
          if (oldArr.length === 0) return array;
          // 2.处理特殊情况start=undefined或者小于0
          if (start === undefined || start < 0) {
            start = 0;
          }
          // 3.处理特殊情况 end=undefined 或者 end大于oldArr的长度
          if (end === undefined || end > oldArr.length) {
            end = oldArr.length;
          }
          // 从oldArr中[start,end]之间去出元素添加到array中
          for (let index = start; index < end; index++) {
            array.push(oldArr[index]);
          }
          return array;
        },
      };
    </script>
    <script>
      /* 
      1. concat()
        语法: var newArray = concat(oldArr, value1[, value2[, ...[, valueN]]]) 
        功能: 将n个数组或值与当前数组合并生成一个新数组
      2. slice()
        语法: var newArray = slice(oldArr, [begin[, end]])
        功能: 返回一个由 begin 和 end 决定的原数组的浅拷贝, 原始数组不会被改变
    */
      console.log(aUtils.concat([1, 2], [3, 4], 6)); // [1, 2, 3, 4, 6]

      console.log(aUtils.slice([1, 3, 5, 7, 9])); // [1, 3, 5, 7, 9]
      console.log(aUtils.slice([1, 3, 5, 7, 9], 1, 3)); // [3, 5]
      console.log(aUtils.slice([1, 3, 5, 7, 9], 1, 10)); // [3, 5, 7, 9]
    </script>
  </body>
</html>
